package pe.com.drokasa.mirror.datagram.request;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang.StringUtils;

/**
 * Clase que representa la informaci&oacute;n com&uacute;n a ser enviada hacia
 * el sistema MIRROR.
 * 
 * @author Synopsis S.A
 *
 */
public class RequestDatagram implements Serializable
{
	private static final long serialVersionUID = 5784493161895827155L;
	
	private String codigoAplicacion;
	private String codigoTransaccion;
	private String codigoTipoDispositivo;
	private String usuario;
	private String password;
	
	private DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
	private DateFormat timeFormat = new SimpleDateFormat("hhmmss");
	
	/**
	 * @return the fillerMirror
	 */
	public String getFillerMirror()
	{
		return StringUtils.leftPad("", 6, " ");
	}
	
	/**
	 * @return the codigoAplicacion
	 */
	public String getCodigoAplicacion() 
	{
		return codigoAplicacion;
	}
	/**
	 * @param codigoAplicacion the codigoAplicacion to set
	 */
	public void setCodigoAplicacion(String codigoAplicacion)
	{
		this.codigoAplicacion = codigoAplicacion;
	}
	/**
	 * @return the codigoTransaccion
	 */
	public String getCodigoTransaccion()
	{
		return codigoTransaccion;
	}
	/**
	 * @param codigoTransaccion the codigoTransaccion to set
	 */
	public void setCodigoTransaccion(String codigoTransaccion)
	{
		this.codigoTransaccion = codigoTransaccion;
	}
	/**
	 * @return the codigoTipoDispositivo
	 */
	public String getCodigoTipoDispositivo() 
	{
		return codigoTipoDispositivo;
	}
	/**
	 * @param codigoTipoDispositivo the codigoTipoDispositivo to set
	 */
	public void setCodigoTipoDispositivo(String codigoTipoDispositivo) 
	{
		this.codigoTipoDispositivo = codigoTipoDispositivo;
	}
	/**
	 * @return the fecha
	 */
	public String getFecha()
	{
		return dateFormat.format(new Date());
	}
	/**
	 * @return the hora
	 */
	public String getHora()
	{
		return timeFormat.format(new Date());
	}
	/**
	 * @return the usuario
	 */
	public String getUsuario() 
	{
		return StringUtils.rightPad(usuario, 10);
	}
	/**
	 * @param usuario the usuario to set
	 */
	public void setUsuario(String usuario)
	{
		this.usuario = usuario;
	}
	/**
	 * @return the password
	 */
	public String getPassword() 
	{
		return StringUtils.leftPad(password, 6);
	}
	/**
	 * @param password the password to set
	 */
	public void setPassword(String password) 
	{
		this.password = password;
	}
	/**
	 * @return the filler
	 */
	public String getFiller()
	{
		return StringUtils.leftPad("", 6, "0");
	}
	
	/**
	 * @return
	 */
	protected String buildHeader()
	{
		StringBuilder builder = new StringBuilder(53);
		builder.append(getFillerMirror());
		builder.append(getCodigoAplicacion());
		builder.append(getCodigoTransaccion());
		builder.append(getCodigoTipoDispositivo());
		builder.append(getFecha());
		builder.append(getHora());
		builder.append(getUsuario());
		builder.append(getPassword());
		builder.append(getFiller());
		
		return builder.toString();
	}
}